// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include <assert.h>
// #include "windows.h"
// // 节点结构
// typedef struct LinkNode {
//     int data; // 存储数据
//     struct LinkNode* next; // 指向下一个节点
// } LinkNode;
//
// // 链表结构
// typedef struct LinkList {
//     LinkNode* head; // 指向头节点
// } LinkList;
//
// // 初始化循环单链表
// LinkList* LinkInit() {
//     LinkList* list = (LinkList*)malloc(sizeof(LinkList));
//     if (list == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     list->head = (LinkNode*)malloc(sizeof(LinkNode));
//     if (list->head == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     list->head->next = list->head; // 初始化为循环链表
//     return list;
// }
//
// // 插入节点到循环单链表尾部
// void LinkInsert(LinkList* list, int data) {
//     assert(list);
//     LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
//     if (newNode == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->data = data;
//
//     LinkNode* tail = list->head->next; // 找到尾节点
//     while (tail->next != list->head) {
//         tail = tail->next;
//     }
//     tail->next = newNode; // 尾节点的next指向新节点
//     newNode->next = list->head; // 新节点的next指向头节点
// }
//
// // 删除循环单链表中的节点
// void LinkDelete(LinkList* list, int data) {
//     assert(list);
//     LinkNode* current = list->head;
//     LinkNode* prev = list->head;
//
//     while (current->next != list->head) {
//         if (current->next->data == data) {
//             LinkNode* temp = current->next;
//             current->next = temp->next; // 跳过要删除的节点
//             if (temp == list->head) { // 如果删除的是头节点
//                 list->head = current->next;
//             }
//             free(temp);
//             return;
//         }
//         current = current->next;
//     }
// }
//
// // 查找循环单链表中的节点
// LinkNode* LinkFind(LinkList* list, int data) {
//     assert(list);
//     LinkNode* current = list->head->next;
//     while (current != list->head) {
//         if (current->data == data) {
//             return current;
//         }
//         current = current->next;
//     }
//     return NULL; // 未找到
// }
//
// // 打印循环单链表
// void LinkPrint(LinkList* list) {
//     assert(list);
//     LinkNode* current = list->head->next;
//     while (current != list->head) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// // 销毁循环单链表
// void LinkDestroy(LinkList* list) {
//     assert(list);
//     LinkNode* current = list->head;
//     LinkNode* next;
//     do {
//         next = current->next;
//         free(current);
//         current = next;
//     } while (current != list->head);
//     free(list);
// }
//
// //h2链接在h1的后面
// void LinkBack(LinkList* h1,LinkList* h2) {
//     if(h1==NULL||h2==NULL||h1->head==NULL||h2->head==NULL) {
//         return;
//     }
//     LinkNode* a=h1->head->next;
//     LinkNode* b=h2->head->next;
//     while (a->next!=h1->head) {
//         a=a->next;
//     }
//     a->next=b;//a指向h1最后一个节点元素，连接h2第一个元素
//     while (b->next!=h2->head) {
//         b=b->next;
//     }
//     b->next=h1->head;
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     //初始化循环链表
//     LinkList* h1=LinkInit();
//     LinkList* h2=LinkInit();
//     //插入元素
//     LinkInsert(h1,1);
//     LinkInsert(h1,2);
//     LinkInsert(h1,3);
//     LinkInsert(h1,4);
//     LinkInsert(h1,5);
//
//     LinkInsert(h2,6);
//     LinkInsert(h2,7);
//     LinkInsert(h2,8);
//     LinkInsert(h2,9);
//     LinkInsert(h2,10);
//     //打印
//     LinkPrint(h1);
//     LinkPrint(h2);
//     //连接链表
//     LinkBack(h1,h2);
//     //打印连接后的结果
//     LinkPrint(h1);
//
//     LinkDestroy(h1);
//     LinkDestroy(h2);
//     return 0;
// }